#ifndef NOC_H_
#define NOC_H_

#include "network.h"
#include "fakenet.h"
#include "uarch/module.h"
#include "uarch/types.h"

using namespace std;

class Noc
{
public:
    MAP <int, manifold::kernel::CompId_t> interface_cids;
    LIST <Network*> networks;

    Noc ();
    ~Noc ();

    /** Naming convention goes top teir to lowest teir so it reads "Mesh of buses of buses" for example. */

    void build_fakenet (int num_connections);

    manifold::kernel::CompId_t get_interface_cid_for_id (int id);

    void tick (void);
    void tock (void);
};

#endif /* NOC_H_ */
